Backreference কী এবং কিভাবে কাজ করে?

Backreferences এবং Recursion - জাভাস্ক্রিপ্ট রেগএক্সপি (Javascript RegExp) - Web Development

321

Backreference RegExp (Regular Expressions)-এ একটি শক্তিশালী বৈশিষ্ট্য যা পূর্বে ধরা গ্রুপের মান পুনরায় ব্যবহার করতে দেয়। সহজভাবে বললে, যখন আপনি একটি স্ট্রিংয়ে নির্দিষ্ট একটি অংশকে গ্রুপ হিসেবে ধরেন, তখন সেই গ্রুপের মান backreference এর মাধ্যমে পরে আবার ব্যবহার করতে পারেন। এটি তখন খুবই উপকারী, যখন আপনি একটি প্যাটার্নে পুনরাবৃত্তি বা মিল চান যা পূর্বে মেলা অংশের সাথে সম্পর্কিত।


Backreference এর কাজের পদ্ধতি

RegExp-এ, গ্রুপগুলো () দিয়ে তৈরি করা হয়। গ্রুপগুলোর পর, আপনি backreference ব্যবহার করে সেই গ্রুপগুলির মান পুনরায় মেলাতে পারেন।

Backreference ব্যবহার করতে \1, \2, \3 ইত্যাদি সিনট্যাক্স ব্যবহার করা হয়:

  • \1 – প্রথম গ্রুপের মান
  • \2 – দ্বিতীয় গ্রুপের মান
  • \3 – তৃতীয় গ্রুপের মান

এভাবে, আপনি যেই গ্রুপটি প্রথমে ধরেছেন, সেটির মান পরবর্তীতে backreference দিয়ে প্যাটার্নে পুনরায় ব্যবহার করতে পারবেন।


Backreference এর উদাহরণ

ধরা যাক, আমরা একটি প্যাটার্ন তৈরি করতে চাই যেখানে দুটি অংশে একই মান মেলাতে হবে। এখানে প্রথম গ্রুপটি ধরার পর, দ্বিতীয় গ্রুপটি backreference দিয়ে আগের গ্রুপের মানের সাথে মিলানো হবে।

let regex = /(\d+)-\1/;
let str = "123-123";
console.log(regex.test(str));  // true

এখানে, (\d+) প্রথম গ্রুপ হিসেবে একটি সংখ্যা ধরেছে এবং \1 দিয়ে আমরা প্রথম গ্রুপের মান আবার দ্বিতীয় অংশের সাথে মিলিয়েছি। ফলে, স্ট্রিং "123-123" এই প্যাটার্নের সাথে মিলে যায়।


একাধিক Backreference ব্যবহার

আপনি একাধিক backreferences ব্যবহার করে একাধিক গ্রুপের মান মিলিয়ে আরও জটিল প্যাটার্ন তৈরি করতে পারেন। উদাহরণস্বরূপ, একসাথে তিনটি অংশের পুনরাবৃত্তি যাচাই করতে চাইলে:

let regex = /(\w+)-\1-\1/;
let str = "hello-hello-hello";
console.log(regex.test(str));  // true

এখানে, (\w+) প্রথম গ্রুপটি ধরেছে এবং \1-\1 দিয়ে আমরা একই মান তিনবার মেলানোর চেষ্টা করেছি। ফলে, স্ট্রিং "hello-hello-hello" সফলভাবে এই প্যাটার্নের সাথে মিলেছে।


Backreference এর ব্যবহার: ইমেল যাচাই

ধরা যাক, আপনি একটি ইমেল ঠিকানা যাচাই করতে চান, যেখানে প্রথম অংশ (username) এবং ডোমেন অংশে একই মান থাকতে হবে। Backreference দিয়ে এটি সহজেই করা যেতে পারে:

let regex = /^([a-zA-Z0-9]+)@(\1)\.com$/;
let str = "test@test.com";
console.log(regex.test(str));  // true

এখানে:

  • ([a-zA-Z0-9]+) প্রথম গ্রুপ হিসেবে test ধরেছে।
  • \1 দিয়ে আমরা সেই test কে পুনরায় ডোমেন অংশে মিলাতে চাচ্ছি।
  • ফলে, "test@test.com" স্ট্রিং সফলভাবে মিলে যায়।

Backreference এর সীমাবদ্ধতা

  1. গ্রুপ সীমাবদ্ধতা: RegExp-এ গ্রুপের সংখ্যা সীমিত থাকে, এবং আপনি প্রতিটি গ্রুপের জন্য backreference ব্যবহার করতে পারেন। বেশিরভাগ RegExp ইঞ্জিনে গ্রুপ সংখ্যা সাধারণত 9-10 এর মধ্যে সীমাবদ্ধ থাকে।
  2. পারফরমেন্স: যখন আপনি অনেক গ্রুপ এবং backreference ব্যবহার করেন, তখন প্যাটার্নটি জটিল হতে পারে, যা পারফরমেন্সের উপর কিছুটা প্রভাব ফেলতে পারে।
  3. নির্দিষ্ট অংশের মিল: Backreference শুধুমাত্র একটি গ্রুপের মানকে পুনরায় ব্যবহার করতে পারে, তাই আপনি একাধিক গ্রুপের মধ্যে সম্পর্কযুক্ত মেলানোর জন্য আরও জটিল প্যাটার্ন ব্যবহার করতে হবে।

সারাংশ

Backreference RegExp এর একটি বৈশিষ্ট্য যা পূর্বে ধরা গ্রুপের মানকে পুনরায় মেলানোর জন্য ব্যবহৃত হয়। এটি \1, \2, \3 ইত্যাদি সিনট্যাক্স ব্যবহার করে পূর্ববর্তী গ্রুপের মানের সঙ্গে মিলাতে সাহায্য করে। এটি বিশেষত যখন আপনি একটি স্ট্রিংয়ের মধ্যে পুনরাবৃত্তি বা সম্পর্কিত অংশের মিল খুঁজতে চান, তখন অত্যন্ত কার্যকর।

Content added By
Promotion

Are you sure to start over?

Loading...